BINARIES = \
	testLog \
	testServer \
	testClient \
	testGenerator
#	testServer
#	testCLParser
#	testDaemon	
#	testTreadPool

INC_PATH = \
	-I/usr/include \
	-I./include \
	-I../daemon/include \
	-I../log/include \
	-I../parser/include \
	-I../socket/include \
	-I../generator_framework/include \
	-I../../protocols/source

vpath %.cc \
../daemon/source:\
../log/source:\
../parser/source:\
../socket/source:\
../generator_framework/source:\
../../protocols/source:

vpath %.cpp \
../socket/source:

CC = g++
LD = g++

LIB_STATIC = \
	/usr/lib/libboost_system.a \
	/usr/lib/libboost_thread.a

LIB_DYNAMIC = \
	-L/usr/lib -lboost_system -lboost_thread

CCFLAGS = -Wall -g -O2 -c $(INC_PATH)
LDFLAGS = -Wall -g 

DIR_OBJ = obj

$(DIR_OBJ)/%.o:%.cc
	@[ -d $(DIR_OBJ) ] || mkdir -p $(DIR_OBJ)
	@echo "Compiling ($@)"
	$(CC) $(CCFLAGS) -o $@ $<

$(DIR_OBJ)/%.o:%.cpp
	@[ -d $(DIR_OBJ) ] || mkdir -p $(DIR_OBJ)
	@echo "Compiling ($@)"
	$(CC) $(CCFLAGS) -o $@ $<

################################################################################
#
# 
#
################################################################################
default: all

all: $(BINARIES)

clean:
	@echo "Removing object files and binaries"
	rm -fr $(DIR_OBJ)
	rm -f $(BINARIES)

################################################################################
#
# Log
#
################################################################################
OBJ_LOG = \
	$(DIR_OBJ)/testLog.o \
	$(DIR_OBJ)/TraceManager.o \
	$(DIR_OBJ)/TraceObj.o
	
testLog: $(OBJ_LOG)
	$(LD) $^ -g -pthread -Wl,-rpath=$/usr/lib -L/usr/lib -lboost_system -lboost_thread -o $@ 
	
################################################################################
#
# Server
#
################################################################################
OBJ_SERVER = \
	$(DIR_OBJ)/TraceManager.o \
	$(DIR_OBJ)/TraceObj.o \
	$(DIR_OBJ)/testServer.o \
	$(DIR_OBJ)/ServicePool.o \
	$(DIR_OBJ)/Server.o \
	$(DIR_OBJ)/Connection.o \
	$(DIR_OBJ)/RequestHandler.o \
	$(DIR_OBJ)/Message.o \
	$(DIR_OBJ)/MessageQueue.o

#OBJ_SERVER = \
#	$(DIR_OBJ)/Converter.o \
#	$(DIR_OBJ)/Parser.o \
#	$(DIR_OBJ)/CommandLineParser.o \
#	$(DIR_OBJ)/ThreadPool.o \
#	$(DIR_OBJ)/mainFunc.o \
#	$(DIR_OBJ)/ServerTcp.o \
#	$(DIR_OBJ)/Connection.o \
#	$(DIR_OBJ)/RequestHandler.o \
#	$(DIR_OBJ)/testServer.o

LIB_SERVER = -L/usr/lib -lboost_system -lboost_thread
LDFLAGS_SERVER = -g -pthread -Wl,-rpath=$/usr/lib $(LIB_SERVER)

testServer: $(OBJ_SERVER)
	$(LD)  $^ $(LDFLAGS_SERVER) -o $@

################################################################################
#
# Client
#
################################################################################
OBJ_CLIENT = \
	$(DIR_OBJ)/testClient.o \

LIB_CLIENT = -L/usr/lib -lboost_system -lboost_thread
LDFLAGS_CLIENT = -g -pthread -Wl,-rpath=$/usr/lib $(LIB_CLIENT)

testClient: $(OBJ_CLIENT)
	$(LD)  $^ $(LDFLAGS_CLIENT) -o $@

################################################################################
#
# Daemon
#
################################################################################
OBJ_DAEMON = \
	$(DIR_OBJ)/Converter.o \
	$(DIR_OBJ)/Parser.o \
	$(DIR_OBJ)/CommandLineParser.o \
	$(DIR_OBJ)/ThreadPool.o \
	$(DIR_OBJ)/mainFunc.o \
	$(DIR_OBJ)/testDaemon.o

testDaemon: $(OBJ_DAEMON) $(LIB_STATIC)
	@echo "Linking ($@)"
	$(LD) -pthread  $(LDFLAGS) -o $@ $^ -lrt 

################################################################################
#
# Thread Pool
#
################################################################################
OBJ_THREAD_POOL = \
	$(DIR_OBJ)/ThreadPool.o \
	$(DIR_OBJ)/testTreadPool.o

testTreadPool: $(OBJ_THREAD_POOL) $(LIB_STATIC)
	@echo "Linking ($@)"
	$(LD) -pthread $(LDFLAGS) -o $@ $^ -lrt
	
################################################################################
#
# Configuration File Parser
#
################################################################################
OBJ_CF_PARSER = \
	$(DIR_OBJ)/ConfigFileParser.o \
	$(DIR_OBJ)/testParser.o

testCFParser: $(OBJ_CF_PARSER)
	@echo "Linking ($@)"
	$(LD) $(LDFLAGS) -o $@ $^

################################################################################
#
# Command Line Parser
#
################################################################################
OBJ_CL_PARSER = \
	$(DIR_OBJ)/Converter.o \
	$(DIR_OBJ)/Parser.o \
	$(DIR_OBJ)/CommandLineParser.o \
	$(DIR_OBJ)/testCommandLineParser.o

testCLParser: $(OBJ_CL_PARSER)
	@echo "Linking ($@)"
	$(LD) $(LDFLAGS) -o $@ $^

################################################################################
#
# Generator
#
################################################################################
OBJ_GENERATOR = \
	$(DIR_OBJ)/testGenerator.o \
	$(DIR_OBJ)/TraceManager.o \
	$(DIR_OBJ)/TraceObj.o \
	$(DIR_OBJ)/Generator.o \
	$(DIR_OBJ)/EventData.o \
	$(DIR_OBJ)/StateBase.o \
	$(DIR_OBJ)/GeneratorEnvironment.o
	
testGenerator: $(OBJ_GENERATOR)
	$(LD) $^ -g -pthread -Wl,-rpath=$/usr/lib -L/usr/lib -lboost_system -lboost_thread -o $@

.SILENT :